#位操作相关知识记录

#左移会变大，右移会变小，因为高位在左边
#正整数左移一位相当于乘以2,右移一位相当于除以2

'''
左移右移的规则 来自百度百科:s
https://baike.baidu.com/item/%E5%8F%B3%E7%A7%BB%E8%BF%90%E7%AE%97%E7%AC%A6/3828526?fr=aladdin
左移运算是将一个二进制位的操作数按指定移动的位数向左移位，移出位被丢弃，右边的空位一律补0。
右移运算是将一个二进制位的操作数按指定移动的位数向右移动，移出位被丢弃，左边移出的空位或者一律补0，
或者补符号位，这由不同的机器而定。
还可利用右移运算符计算a的第b个二进制位是什么 例如：
(a>>b)&1; 该方法原理是，a向右移动b位之后,第b位就是最高位(不包括符号位),那个再和1进行and运算

 #简单来说右移的规则:各位按位右移,最低位向右移出(丢弃),最高位产生的空位填入与原最高位相同的值,即符号位不变
例如：
153 10011001 
右移两位:
38 100110 

'''


def check_bit(num,bitNum):
    '''
    通过左移 判断某个数的某位是0还是1
    '''
    operNum = 1 << bitNum #得到的结果该位上肯定是 1 其余位是 0
    result = num & operNum #执行and运算
    return result > 0

def check_bit2(num,bitNum):
    '''
    通过右移判断某个数的第几位是0还是1
    '''
    ret = num >> bitNum & 1
    return ret>0 